package com.example.csmall.product.service.impl;

import com.example.csmall.product.ex.ServiceException;
import com.example.csmall.product.mapper.AttributeTemplateMapper;
import com.example.csmall.product.pojo.dto.AttributeTemplateAddNewDTO;
import com.example.csmall.product.pojo.dto.AttributeTemplateUpdateDTO;
import com.example.csmall.product.pojo.entity.Attribute;
import com.example.csmall.product.pojo.entity.AttributeTemplate;
import com.example.csmall.product.pojo.vo.AttributeTemplateListItemVO;
import com.example.csmall.product.pojo.vo.AttributeTemplateStandardVO;
import com.example.csmall.product.service.AttributeTemplateService;
import com.example.csmall.product.web.ServiceCode;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Service 使用此注解后，才可以自动装备AttributeTemplateService
 */
@Service
public class AttributeTemplateServiceImpl implements AttributeTemplateService {

    @Autowired
    AttributeTemplateMapper atMapper;

    @Override
    public void addNew(AttributeTemplateAddNewDTO attributeTemplateAddNewDTO) {
        int countName = atMapper.countName(attributeTemplateAddNewDTO.getName());
        if (countName > 0) {
            String message = "属性模板名称已经存在，请重新输入";
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }
        AttributeTemplate attributeTemplate = new AttributeTemplate();
        BeanUtils.copyProperties(attributeTemplateAddNewDTO, attributeTemplate);
        int rows = atMapper.insert(attributeTemplate);
        if (rows != 1) {
            String message = "添加属性模板失败，服务器正忙，请稍后重试!";
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }
    }

    @Override
    public void delete(Long id) {
        AttributeTemplateStandardVO standardById = atMapper.getStandardById(id);
        if (standardById != null) {
            int rows = atMapper.deleteById(id);
            if (rows != 1) {
                String message = "删除属性模板失败，服务器正忙，请稍后重试!";
                throw new ServiceException(ServiceCode.ERR_INSERT, message);
            }
        } else {
            String message = "您想要删除的数据已不存在";
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
    }

    @Override
    public void updateInfoById(Long id, AttributeTemplateUpdateDTO attributeTemplateUpdateDTO) {
        //判断除此行记录外是否有同此次传输的name属性相同的记录
        int countByNameAndNotId = atMapper.countByNameAndNotId(id, attributeTemplateUpdateDTO.getName());
        if (countByNameAndNotId > 0) {
            String message = "您所输入的属性模板名称不可以和其他属性模板名称重复";
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }
        //创建attribute对象
        AttributeTemplate attribute = new AttributeTemplate();
        BeanUtils.copyProperties(attributeTemplateUpdateDTO, attribute);
        attribute.setId(id);
        //执行修改方法
        int rows = atMapper.updateById(attribute);
        if (rows != 1) {
            String message = "修改属性模板失败，服务器正忙，请稍后重试!";
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }
    }

    @Override
    public List<AttributeTemplateListItemVO> list() {
        List<AttributeTemplateListItemVO> list = atMapper.list();
        return list;
    }

    @Override
    public AttributeTemplateStandardVO getStandardById(Long id) {
        AttributeTemplateStandardVO standardById = atMapper.getStandardById(id);
        if (standardById == null) {
            String message = "您想要查询的数据已不存在";
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
        return standardById;
    }

}
